package simultaneously.share;

/**
 * DualSynch类中f()用synchronized方法，给this加锁。
 * g()通过synchronized代码块，给object加锁；
 * 两个锁加在不同对象上所以两个锁是独立的，可以交替进行方法。
 */
class DualSynch{
    private final Object object = new Object();
    public synchronized void f(){
        for(int i = 0;i<5;i++){
            System.out.println("f()");
            Thread.yield();
        }
    }

    public void g(){
        synchronized (object){
            for(int i = 0;i<5;i++){
                System.out.println("g()");
                Thread.yield();
            }
        }
    }
}
public class SynObject {
    public static void main(String[] args){
        final DualSynch ds = new DualSynch();
        new Thread(){
            public void run(){
                ds.f();
            }
        }.start();
        ds.g();
    }
}
